#include <bits/stdc++.h>
#define INF 1000000000
#define LINF 1000000000000000000
#define ll long long
#define F first
#define S second
#define N ((1<<18)+10)
using namespace std;
int n,m,k,a[N],mask[N],qry[N],ch[N],plc[N][18];
bool tp[N],isbad[N];
ll sum[N],ans[N],pre[N];
vector<int> upds[N];
void erz(int x,int v){
	sum[x]=0;
	for(int i=1;i<=k;i++){
		int y=x>>1,c0=ch[y],c1=c0^1;
		if(x==c1&&(!(mask[c0]&((1<<i)-1)))) break;
		sum[y]-=v;
		x>>=1;
	}
	return;
}
void dfsbad(int x){
	if(isbad[x]) return;
	isbad[x]=true;
	if(x<(1<<k)){
		dfsbad(x<<1);
		dfsbad(x<<1|1);
	}
	return;
}
void upd(int x,int w,int v){
	if(isbad[x]) return;
	w=min(w,k);
	mask[x]=1<<w;
	for(int i=1;i<=k;i++){
		int y=x>>1,c0=ch[y],c1=c0^1;
		mask[y]=(mask[c0]>>i)<<i;
		sum[y]=sum[c0];
		if(mask[c0]&((1<<i)-1)) mask[y]|=mask[c1],sum[y]+=sum[c1];
		else{
			dfsbad(c1);
			if(x==c1) break;
		}
		x>>=1;
	}
	int t=plc[v][w];
	if((1<<(t-1))<v) erz(v+(1<<k)-1,v);
	else if(t<=k) upds[1<<(t-1)].push_back(v);
	return;
}
int main(){
	freopen("arena.in","r",stdin);
	freopen("arena.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=0;i<m;i++) cin>>qry[i];
	for(k=0;(1<<k)<n;k++);
	for(int i=1;i<=k;i++){
		string s;
		cin>>s;
		for(int j=0;j<s.size();j++) tp[1<<(k-i)|j]=(s[j]=='1');
	}
	for(int i=1;i<(1<<k);i++) ch[i]=i<<1|tp[i];
	for(int i=1;i<=(1<<k);i++) for(int j=(1<<k)+i-1;j;j>>=1) pre[j]+=i;
	for(int v=1;v<=n;v++) for(int w=0;w<=k;w++){
		int x=(1<<k)+v-1;
		plc[v][w]=k+1;
		for(int i=1;i<=k;i++){
			int y=x>>1;
			if(x==ch[y]&&w<i){
				plc[v][w]=i;
				break;
			}
			x>>=1;
		}
	}
	int T;
	cin>>T;
	while(T--){
		int A[4];
		for(int i=0;i<4;i++) cin>>A[i];
		for(int i=0;i<(2<<k);i++){
			isbad[i]=false;
			mask[i]=(1<<(k+1))-1;
			sum[i]=pre[i];
			upds[i].clear();
		}
		for(int i=1,x=1<<k;i<=n;i++){
			upd((1<<k)+i-1,a[i]^A[i&3],i);
			ans[i]=sum[x];
			for(int j=0;j<upds[i].size();j++){
				int y=upds[i][j];
				erz((1<<k)+y-1,y);
			}
			if(__builtin_popcount(i)==1) x>>=1;
		}
		ll res=0;
		for(int i=0;i<m;i++) res^=1ll*(i+1)*ans[qry[i]];
		cout<<res<<'\n';
	}
	return 0;
}